package com.jpsl.core.reflection.wrapper;

import java.util.List;

/**
 * 对象包装
 *
 * @author 懒王猫
 */
public interface ObjectWrapper {

    /**
     * 获取所有属性名称
     */
    List<String> getProperties();

    /**
     * 是否可以获取属性
     *
     * @param property 属性名称
     * @return true: 可以获取属性
     */
    boolean hasGetter(String property);

    /**
     * 是否可以设置属性
     *
     * @param property 属性名称
     * @return true: 可以设置属性
     */
    boolean hasSetter(String property);

    /**
     * 获取属性值
     *
     * @param property 属性名称
     * @return 值
     */
    Object getValue(String property);

    /**
     * 属性获取器的类型
     *
     * @param property 属性名称
     * @return
     */
    Class<?> getGetterType(String property);

    /**
     * 设置属性值
     *
     * @param property 属性名称
     * @param value 值
     */
    void setValue(String property, Object value);

    /**
     * 属性设置器的类型
     *
     * @param property 属性名称
     * @return
     */
    Class<?> getSetterType(String property);

}
